在前端会有通过 canvas 合成图片,再保存到本地的情况,在保存的时候会有可能出现一些问题。
在我们接到和图片相关的需求时,如图片合成、压缩上传等都是通过 canvas 去实现。但把 canvas 处理后的图片下载到本地保存一般都是通过 a 标签来实现的:
1 | const link_A = document.createElement("a"); |
这也是一般性的做法,但是这样做会有一个问题就是 canvas 图片如果太大,会造成无法下载。在 Chrome 浏览器就会出现 网络错误 的问题。
这是因为在使用 锚元素(an Anchor Element) 标签时,例如:<a> ,他们的 src 或 href 属性会有长度的限制。若图片太大转化为 base64 会超出长度限制出现网络错误的问题。
解决办法为将 canvas 转化为 blob 实现下载:
将 base64 转化为 blob :
1 | const binStr = atob(base64.split(",")[1]); |
将 canvas 转化为 blob :
1 | canvas.toBlob(blob => { |